#include <stdio.h>
#include <stdlib.h>

/* 不相交集的定义与操作 */
#define kMaxSize 10000             /* 集合最大元素个数 */
typedef int SElemSet; /* 默认元素用非负整数表示 */
typedef SElemSet
SetName; /* 默认用根结点的下标作为集合名称 */
typedef struct SetNode {
    SElemSet parent; /* 父结点 */
    int rank; /* 秩 */
} Set[kMaxSize + 1]; /* 假设集合元素下标从1开始 */

void InitSet(Set set, int n) {
    SElemSet x;

    for (x = 1; x <= n; x++) {
        set[x].parent = x;
        set[x].rank = 0;
    }
}

SetName Find(Set set, SElemSet x) {
    if (x != set[x].parent) {
        set[x].parent = Find(set, set[x].parent);
    }
    return set[x].parent;
}

void Union(Set set, SElemSet x, SElemSet y) {
    SetName i, j;

    i = Find(set, x);
    j = Find(set, y);
    if (i != j) {
        if (set[i].rank > set[j].rank) {
            set[j].parent = i;
        } else if (set[i].rank < set[j].rank) {
            set[i].parent = j;
        } else { /* set[i].rank == set[j].rank */
            set[i].parent = j;
            set[j].rank++;
        }
    }
}
/* 不相交集的定义与操作 结束 */

void InputConnection(Set set); /* 处理I操作*/
void CheckConnection(Set set); /* 处理C操作*/
void CheckNetwork(Set set, int n); /* 处理S操作*/

int main(void) {
    int n;
    char cmd;
    Set set;

    scanf("%d\n", &n);
    InitSet(set, n);
    do {
        scanf("%c", &cmd);
        switch (cmd) {
        case 'I':
            InputConnection(set);
            break;
        case 'C':
            CheckConnection(set);
            break;
        case 'S':
            CheckNetwork(set, n);
            break;
        default:
            break;
        }
    } while (cmd != 'S');

    return 0;
}

void InputConnection(Set set) {
    /* 处理I操作，将两台机器连通 */
    SElemSet c1, c2;

    scanf("%d %d\n", &c1, &c2);
    Union(set, c1, c2);
}

void CheckConnection(Set set) {
    /* 处理C操作，判断两台机器是否连通 */
    SElemSet c1, c2;

    scanf("%d %d\n", &c1, &c2);
    if (Find(set, c1) == Find(set, c2))
        printf("yes\n");
    else
        printf("no\n");
}

void CheckNetwork(Set set, int n) {
    /* 处理S操作，检查有多少个根结点 */
    SElemSet x;
    int counter = 0;

    for (x = 1; x <= n; x++) {
        if (set[x].parent == x) /* 发现根结点 */
            counter++; /* 计数器增1 */
    }
    if (counter == 1)
        printf("The network is connected.\n");
    else
        printf("There are %d components.\n", counter);
}